package com.momochen.alarmclockdemo.adapter;

import android.app.Activity;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;

import com.momochen.alarmclockdemo.inter.OnClickRecyclerItemListener;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by momochen on 2016/10/11.
 * 原始adaper基类
 */
public abstract class BaseListAdapter<T, V extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<V> {

    /**
     * 数据源
     */
    protected List<T> mDatas;
    protected Activity activity;
    /**
     * 点击事件
     */
    protected OnClickRecyclerItemListener onClickRecyclerItemListener;

    public BaseListAdapter() {
        initDatas();
    }

    public BaseListAdapter(Activity activity) {
        this.activity = activity;
        initDatas();
    }

    private void initDatas() {
        this.mDatas = new ArrayList<>();
    }

    public void setOnClickRecyclerItemListener(OnClickRecyclerItemListener onClickRecyclerItemListener) {
        this.onClickRecyclerItemListener = onClickRecyclerItemListener;
    }

    @Override
    public int getItemCount() {
        return mDatas == null ? 0 : mDatas.size();
    }

    /**
     * 设置data
     *
     * @param data
     */
    public void setData(@NonNull List<T> data) {
        mDatas = data;
        notifyDataSetChanged();
    }

    /**
     * 获取数据
     *
     * @return
     */
    public List<T> getDatas() {
        return mDatas == null ? (mDatas = new ArrayList<>()) : mDatas;
    }

    /**
     * 清理
     */
    public void clearAll() {
        if (mDatas != null) {
            mDatas.clear();
            notifyDataSetChanged();
        }
    }

    /**
     * 追加数据
     *
     * @param datas
     */
    public void addDatas(List<T> datas) {
        if (mDatas == null) {
            mDatas = new ArrayList<>();
        }

        if (datas != null && !datas.isEmpty()) {
            mDatas.addAll(datas);
        }
        notifyDataSetChanged();
    }

    /**
     * 追加数据  并清除
     *
     * @param datas
     */
    public void addClearAndDatas(List<T> datas) {
        if (mDatas != null) {
            mDatas.clear();
        }

        addDatas(datas);
    }

    /**
     * 插入数据
     *
     * @param datas
     */
    public void addDatas(int index, List<T> datas) {
        if (mDatas != null && datas != null && !datas.isEmpty()) {
            mDatas.addAll(0, datas);
        }
        notifyDataSetChanged();
    }

    /**
     * 获取item
     *
     * @param position
     * @return
     */
    public T getItem(int position) {
        if (mDatas.size() > position && position >= 0) {
            return mDatas.get(position);
        }
        return null;
    }

    /**
     * 添加item
     *
     * @param obj
     */
    public void addItem(T obj) {
        if (mDatas != null) {
            mDatas.add(obj);
        }
        notifyDataSetChanged();
    }

    /**
     * 添加指定位置 item
     *
     * @param pos
     * @param obj
     */
    public void addItem(int pos, T obj) {
        if (mDatas != null) {
            mDatas.add(pos, obj);
        }
        notifyDataSetChanged();
    }

    /**
     * 移除 item
     *
     * @param obj
     */
    public void removeItem(Object obj) {
        if (mDatas == null) {
            return;
        }
        mDatas.remove(obj);
        notifyDataSetChanged();
    }

    /**
     * 移除 item
     *
     * @param postion
     */
    public void removeItem(int postion) {
        if (mDatas == null) {
            return;
        }
        if (mDatas.size() <= postion || postion < 0) {
            return;
        }
        mDatas.remove(postion);
        notifyDataSetChanged();
    }

    /**
     * 移除 item 动画
     *
     * @param postion
     */
    public void removeItemAnim(int postion) {
        if (mDatas == null) {
            return;
        }
        if (mDatas.size() <= postion || postion < 0) {
            return;
        }
        mDatas.remove(postion);
        notifyItemRemoved(postion - 1);
    }

}
